1
От запросов к пайплайнам: обзор оркестрации в LangChain
AI010Lesson 6
00:00

От запросов к пайплайнам

Эволюция взаимодействия с моделями крупного масштаба

В предыдущих уроках мы сосредоточились на одношаговых взаимодействиях. Однако реальные приложения требуют больше, чем просто один вопрос и ответ. Чтобы создавать масштабируемые системы ИИ, мы должны перейти к оркестрации. Это включает в себя объединение нескольких вызовов модели, ветвление логики на основе пользовательского ввода и возможность модели взаимодействовать с внешними данными.

Основные элементы оркестрации

  • LLMChain: Основной блок. Он объединяет шаблон запроса с языковой моделью.
  • Последовательные цепочки: Они позволяют создавать многошаговый процесс, где выход одного шага становится входом следующего.
  • Цепочки маршрутизации: Они действуют как «контроллеры трафика», используя языковую модель для определения, какая специализированная подцепочка должна обрабатывать конкретный запрос (например, отправка математического вопроса в «Цепочку по математике» и исторического — в «Цепочку по истории»).

Ключевой принцип: правило цепочки

Цепочки позволяют объединить несколько компонентов — модели, запросы и память — в одну целостную программу. Эта модульность гарантирует, что сложные задачи можно разбить на управляемые, отладочные этапы.

Про-совет: отладка пайплайнов
Когда ваши пайплайны становятся сложными, используйте langchain.debug = True. Это «рентгеновское зрение» позволяет видеть точные запросы, которые отправляются, и сырые выходные данные, полученные в фоновом режиме на каждом этапе цепочки.
sequential_chain.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>
Question 1
In LangChain, what is the primary difference between a SimpleSequentialChain and a standard SequentialChain?
SimpleSequentialChain supports multiple input variables, while SequentialChain does not.
SimpleSequentialChain only supports a single input and single output flowing between steps.
Only SequentialChain can be used with ChatOpenAI models.
Challenge: Library Support Router
Design a routing mechanism for a specialized bot.
You are building a support bot for a library.

Define the logic for a RouterChain that distinguishes between "Book Recommendations" and "Operating Hours."
Step 1
Create two prompt templates: one for book suggestions and one for library schedule info.
Solution:
book_template = """You are a librarian. Recommend books based on: {input}"""
schedule_template = """You are a receptionist. Answer hours queries: {input}"""

prompt_infos = [
    {"name": "books", "description": "Good for recommending books", "prompt_template": book_template},
    {"name": "schedule", "description": "Good for answering operating hours", "prompt_template": schedule_template}
]
Step 2
Define the router_template to guide the LLM on how to classify the user's intent, and initialize the chain.
Solution:
router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format(
    destinations=destinations_str
)
router_prompt = PromptTemplate(
    template=router_template,
    input_variables=["input"],
    output_parser=RouterOutputParser(),
)
router_chain = LLMRouterChain.from_llm(llm, router_prompt)

chain = MultiPromptChain(
    router_chain=router_chain,
    destination_chains=destination_chains,
    default_chain=default_chain,
    verbose=True
)